// 配置路由相关信息
import VueRouter from 'vue-router'
import Vue from 'vue'


// 结合Vue的异步组件和webpack的代码分析
const home = resolve => {require.ensure(['../components/home.vue'], () => { 
  resolve(require('../components/home.vue')) 
})}
// AMD写法
const about = resolve => require(['../components/about.vue'], resolve)
// ES6方法
const user = () => import('../components/user')
const homeNews = () => import('../components/homeNews')
const homeMessage = () => import('../components/homeMessage')
const profile = () => import('../components/Profile')

// 1. 通过Vue.use(插件) 安装插件
// 调用了use后 会调用内部的install方法
Vue.use(VueRouter)

// 2. 创建路由对象
const routes = [
  {
    path: '',
    // 重定向
    redirect: '/home',
  },
  {
    // 完整url : 
    path: '/home',
    component: home,
    meta: {
      title: "首页"
    },
    children: [
      // {
      //   path: '',
      //   redirect: 'news'
      // },
      {
        // 子路由不需要加上前缀/
        path: 'news',
        // meta: {
        //   title: "新闻"
        // },
        component: homeNews
      },
      {
        // 子路由不需要加上前缀/
        path: 'message',
        // meta: {
        //   title: "消息"
        // },
        component: homeMessage
      }
    ]
  },
  {
    path: '/about',
    meta: {
      title: "关于"
    },
    component: about,
    // 跳转到/about路由前的拦截器
    // beforeEnter: (to, from, next) => {
    //   console.log("触发关于的路由守卫")
    //   next()
    // }
  },
  {
    // 动态路由拼接 名字为key 子页面获取时通过key获取
    path: '/user/:id',
    meta: {
      title: "用户"
    },
    component: user
  },
  {
    path: '/profile',
    meta: {
      title: "档案"
    },
    component: profile
  }
]

const router = new VueRouter({
  // 配置路由和组件之间的应用关系 
  // myroutes == ES6增强写法
  routes,
  mode: 'history',
  // 哪个标签处于活跃状态添加该class属性
  linkActiveClass: 'active'
})

// 路由守卫 : 前置钩子hook
router.beforeEach((to, from, next) => {
  // 在跳转之前执行
  document.title = to.matched[0].meta.title
  // console.log("准备跳转")
  console.log(to)
  // 重写后需要调用 否则无法正常显示 跳转
  next()
})

// 后置钩子
router.afterEach((to, from) => {
  // console.log('跳转完成')
})

// 3. 将router对象传入vue实例
export default router